[C++]关于显示小数部分的问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:43:16
输入任意小数,然后显示它的小数部分。
但有个地方要注意下,比如输入3.142,那么显示结果为142,而不是0.142。

#include <iostream.h>
#include <math.h>
void main()
{
double a,b;int c,d;
cout<<"请先输入一个小数(小数位不能超过100位):";
cin>>a;
b=a-(int)a;
for(c=1;c<100;c++)
{
b=b*(pow(10,c));
if((int)b==b)
break; //当b为整数时跳出并输出
}
cout<<"这个数的小数部分是:"<<b<<endl;
}

我是这么做的,但结果比较离谱,不知道为什么,求教。

b=a-(int)a; 这一步不太好,十分的不可靠。
具有很高的不确定信,一个double类型的值变成int类型的值——两个长度都不一样。
推荐是使用字符串来保存这样的数字
char num[100];
cin>>num;
int j;
for(int i=0;num[i];i++)if(num[i]=='.'){j=i;break;}
cout<<"这个数的小数部分是:";
for(int end=j+1;num[i];end++)cout<<num[end];

如果你想把它换成int类型的数字也很容易,使用atoi(一个字符数组就就可以了)
cout<<endl;

不能像这样做。因为DOUBLE型是有范围的(到不了小数后第一百位)。
建议你看一下浮点数的存储。因为当小数点前的数值过大时,精度不会很高。

何不换一种思路,用字符串来做

b=a-(int)a; 语句之后直接
printf("%g", b);

for(c=1;c<100;c++)
{
b=b*(pow(10,c));
if((int)b==b)
break; //当b为整数时跳出并输出
}

1、if中(int)b强制转换后b一定等于0所以(int)b==b永远不可能相等for循环就每次都是以出C=99输出造成错误
2、pow(x,y)x和y都必须是double型,所以c和10都是整形造成错误